package com.bot.nft.module.op.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bot.auth.core.pojo.SaBaseLoginUser;
import com.bot.auth.core.util.StpLoginUserUtil;
import com.bot.common.pojo.CommonResult;
import com.bot.nft.core.enums.op.OpRofoEnum;
import com.bot.nft.module.op.domain.bo.OpRofoInfoBo;
import com.bot.nft.module.op.domain.bo.OpRofoQueryBo;
import com.bot.nft.module.op.domain.vo.OpRofoExeLogVo;
import com.bot.nft.module.op.domain.vo.OpRofoInfoVo;
import com.bot.nft.module.op.service.IRofoOpService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;


/**
 * 描述:
 * 时间: 2023-12-02 15:11
 * 负责人: 王速
 **/
@RestController
@RequestMapping("/rofo")
public class OpRofoController {

    @Resource
    private IRofoOpService iRofoOpService;

    /**
     * 保存优先购活动
     */
    @PostMapping("/savrRofo.do")
    public CommonResult<Boolean> savrRofoInfo(@RequestBody @Valid OpRofoInfoBo rofoInfoBo) {
        rofoInfoBo.setStatus(OpRofoEnum.DISABLE.getCode());
        rofoInfoBo.setDeleteFlag(OpRofoEnum.DELETE.getCode());
        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
        rofoInfoBo.setCreateUser(loginUser.getName());
        rofoInfoBo.setCreateTime(new Date());
        Boolean boo = iRofoOpService.addRofoOpInfo(rofoInfoBo);
        if (!boo) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 删除优先购活动
     */
    @GetMapping("/{rofoId}/delRofo.do")
    public CommonResult<Boolean> delRofoList(@PathVariable("rofoId") String rofoId) {
        Boolean signal = iRofoOpService.delRofoOp(rofoId);
        if (!signal) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 启用优先购活动
     */
    @GetMapping("/{rofoId}/enableRofo.do")
    public CommonResult<Boolean> enableRofoOp(@PathVariable("rofoId") String rofoId) {
        Boolean signal = iRofoOpService.enableRofoOp(rofoId);
        if (!signal) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }


    /**
     * 禁用优先购活动
     */
    @GetMapping("/{rofoId}/disRofo.do")
    public CommonResult<Boolean> disRofoOp(@PathVariable("rofoId") String rofoId) {
        Boolean signal = iRofoOpService.disRofoOp(rofoId);
        if (!signal) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 查看优先购活动
     */
    @GetMapping("/{rofoId}/getRofo.do")
    public CommonResult<OpRofoInfoVo> getRofo(@PathVariable("rofoId") String rofoId) {
        OpRofoInfoVo rofoOp = iRofoOpService.getRofoOp(rofoId);
        return CommonResult.data(rofoOp);

    }

    /**
     * 修改优先购活动
     */
    @PostMapping("/updataRofo.do")
    public CommonResult<Boolean> upData(@RequestBody @Valid OpRofoInfoBo rofoInfoBo) {
        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
        rofoInfoBo.setUpdateUser(loginUser.getName());
        Boolean signal = iRofoOpService.updateRofoOpInfo(rofoInfoBo);
        if (!signal) {
            return CommonResult.error();
        }
        return CommonResult.ok();
    }

    /**
     * 查询优先购活动列表
     */
    @PostMapping("/{pageNo}/{pageSize}/list.do")
    public CommonResult<Page<OpRofoInfoVo>> queryRofoOpByPage(@RequestBody OpRofoQueryBo rofoQueryBo, @PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pageSize) {
        Page<OpRofoInfoVo> page = iRofoOpService.queryRofoOpByPage(rofoQueryBo, pageNo, pageSize);
        return CommonResult.data(page);

    }


    /**
     * 执行快照任务
     */
    @GetMapping("/{rofoId}/exeRofo.do")
    public CommonResult<Boolean> exeRofoSnapshot(@PathVariable("rofoId") String rofoId) {
        Boolean signal = iRofoOpService.exeRofoSnapshot(rofoId);
        if (!signal) {
            return CommonResult.error("执行失败(该活动条件未生成资格名单)");
        }
        return CommonResult.ok();

    }

    /**
     * 查看执行日志
     */
    @GetMapping("/{rofoId}/exeLog.do")
    public CommonResult<List<OpRofoExeLogVo>> getExeLog(@PathVariable("rofoId") String rofoId) {
        List<OpRofoExeLogVo> exeLog = iRofoOpService.getExeLog(rofoId);
        return CommonResult.data(exeLog);
    }


}
